home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / dev / gg / bing-1.1.3.lha / bing-1.1.3 / src / include / netinet / ip.h < prev   
C/C++ Source or Header  |  1997-06-06  |  7KB  |  209 lines

  1. /*
  2.  * Copyright (c) 1982, 1986, 1993
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice, this list of conditions and the following disclaimer.
  10.  * 2. Redistributions in binary form must reproduce the above copyright
  11.  *    notice, this list of conditions and the following disclaimer in the
  12.  *    documentation and/or other materials provided with the distribution.
  13.  * 3. All advertising materials mentioning features or use of this software
  14.  *    must display the following acknowledgement:
  15.  *    This product includes software developed by the University of
  16.  *    California, Berkeley and its contributors.
  17.  * 4. Neither the name of the University nor the names of its contributors
  18.  *    may be used to endorse or promote products derived from this software
  19.  *    without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  22.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  25.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31.  * SUCH DAMAGE.
  32.  *
  33.  *    @(#)ip.h    8.1 (Berkeley) 6/10/93
  34.  * ip.h,v 1.5 1995/05/30 08:09:33 rgrimes Exp
  35.  */
  36.  
  37. #ifndef _NETINET_IP_H_
  38. #define _NETINET_IP_H_
  39.  
  40. /*
  41.  * Define the bytesex if it has not already been done.
  42.  */
  43.  
  44. #ifndef LITTLE_ENDIAN
  45. #define LITTLE_ENDIAN    1234
  46. #endif
  47.  
  48. #ifndef BIG_ENDIAN
  49. #define BIG_ENDIAN    4321
  50. #endif
  51.  
  52. #ifndef PDP_ENDIAN
  53. #define PDP_ENDIAN    3412
  54. #endif
  55.  
  56. #ifndef BYTE_ORDER
  57. #if defined(i386) || defined(__i386__) || defined(__alpha__) \
  58.         || (defined(__mips__) && (defined(MIPSEL) || defined (__MIPSEL__)))
  59. #define BYTE_ORDER   LITTLE_ENDIAN
  60. #elif defined(__mc68000__) || defined (__sparc__) || defined (__PPC__) \
  61.         || (defined(__mips__) && (defined(MIPSEB) || defined (__MIPSEB__)))
  62. # define BYTE_ORDER   BIG_ENDIAN
  63. #else
  64. # error Unknown architecture. You must manually define the endianness.
  65. #endif
  66. #endif
  67.  
  68.  
  69. /*
  70.  * Definitions for internet protocol version 4.
  71.  * Per RFC 791, September 1981.
  72.  */
  73. #define    IPVERSION    4
  74.  
  75. /*
  76.  * Structure of an internet header, naked of options.
  77.  *
  78.  * We declare ip_len and ip_off to be short, rather than u_short
  79.  * pragmatically since otherwise unsigned comparisons can result
  80.  * against negative integers quite easily, and fail in subtle ways.
  81.  */
  82. struct ip {
  83. #if BYTE_ORDER == LITTLE_ENDIAN
  84.     u_char    ip_hl:4,        /* header length */
  85.         ip_v:4;            /* version */
  86. #endif
  87. #ifndef WIN32
  88. #if BYTE_ORDER == BIG_ENDIAN
  89.     u_char    ip_v:4,            /* version */
  90.         ip_hl:4;        /* header length */
  91. #endif
  92. #endif
  93.     u_char    ip_tos;            /* type of service */
  94.     short    ip_len;            /* total length */
  95.     u_short    ip_id;            /* identification */
  96.     short    ip_off;            /* fragment offset field */
  97. #define    IP_DF 0x4000            /* dont fragment flag */
  98. #define    IP_MF 0x2000            /* more fragments flag */
  99. #define    IP_OFFMASK 0x1fff        /* mask for fragmenting bits */
  100.     u_char    ip_ttl;            /* time to live */
  101.     u_char    ip_p;            /* protocol */
  102.     u_short    ip_sum;            /* checksum */
  103.     struct    in_addr ip_src,ip_dst;    /* source and dest address */
  104. };
  105.  
  106. #define    IP_MAXPACKET    65535        /* maximum packet size */
  107.  
  108. /*
  109.  * Definitions for IP type of service (ip_tos)
  110.  */
  111. #define    IPTOS_LOWDELAY        0x10
  112. #define    IPTOS_THROUGHPUT    0x08
  113. #define    IPTOS_RELIABILITY    0x04
  114. #define    IPTOS_MINCOST        0x02
  115.  
  116. /*
  117.  * Definitions for IP precedence (also in ip_tos) (hopefully unused)
  118.  */
  119. #define    IPTOS_PREC_NETCONTROL        0xe0
  120. #define    IPTOS_PREC_INTERNETCONTROL    0xc0
  121. #define    IPTOS_PREC_CRITIC_ECP        0xa0
  122. #define    IPTOS_PREC_FLASHOVERRIDE    0x80
  123. #define    IPTOS_PREC_FLASH        0x60
  124. #define    IPTOS_PREC_IMMEDIATE        0x40
  125. #define    IPTOS_PREC_PRIORITY        0x20
  126. #define    IPTOS_PREC_ROUTINE        0x00
  127.  
  128. /*
  129.  * Definitions for options.
  130.  */
  131. #define    IPOPT_COPIED(o)        ((o)&0x80)
  132. #define    IPOPT_CLASS(o)        ((o)&0x60)
  133. #define    IPOPT_NUMBER(o)        ((o)&0x1f)
  134.  
  135. #define    IPOPT_CONTROL        0x00
  136. #define    IPOPT_RESERVED1        0x20
  137. #define    IPOPT_DEBMEAS        0x40
  138. #define    IPOPT_RESERVED2        0x60
  139.  
  140. #define    IPOPT_EOL        0        /* end of option list */
  141. #define    IPOPT_NOP        1        /* no operation */
  142.  
  143. #define    IPOPT_RR        7        /* record packet route */
  144. #define    IPOPT_TS        68        /* timestamp */
  145. #define    IPOPT_SECURITY        130        /* provide s,c,h,tcc */
  146. #define    IPOPT_LSRR        131        /* loose source route */
  147. #define    IPOPT_SATID        136        /* satnet id */
  148. #define    IPOPT_SSRR        137        /* strict source route */
  149.  
  150. /*
  151.  * Offsets to fields in options other than EOL and NOP.
  152.  */
  153. #define    IPOPT_OPTVAL        0        /* option ID */
  154. #define    IPOPT_OLEN        1        /* option length */
  155. #define IPOPT_OFFSET        2        /* offset within option */
  156. #define    IPOPT_MINOFF        4        /* min value of above */
  157.  
  158. /*
  159.  * Time stamp option structure.
  160.  */
  161. struct    ip_timestamp {
  162.     u_char    ipt_code;        /* IPOPT_TS */
  163.     u_char    ipt_len;        /* size of structure (variable) */
  164.     u_char    ipt_ptr;        /* index of current entry */
  165. #if BYTE_ORDER == LITTLE_ENDIAN
  166.     u_char    ipt_flg:4,        /* flags, see below */
  167.         ipt_oflw:4;        /* overflow counter */
  168. #endif
  169. #ifndef WIN32
  170. #if BYTE_ORDER == BIG_ENDIAN
  171.     u_char    ipt_oflw:4,        /* overflow counter */
  172.         ipt_flg:4;        /* flags, see below */
  173. #endif
  174. #endif
  175.     union ipt_timestamp {
  176.         n_long    ipt_time[1];
  177.         struct    ipt_ta {
  178.             struct in_addr ipt_addr;
  179.             n_long ipt_time;
  180.         } ipt_ta[1];
  181.     } ipt_timestamp;
  182. };
  183.  
  184. /* flag bits for ipt_flg */
  185. #define    IPOPT_TS_TSONLY        0        /* timestamps only */
  186. #define    IPOPT_TS_TSANDADDR    1        /* timestamps and addresses */
  187. #define    IPOPT_TS_PRESPEC    3        /* specified modules only */
  188.  
  189. /* bits for security (not byte swapped) */
  190. #define    IPOPT_SECUR_UNCLASS    0x0000
  191. #define    IPOPT_SECUR_CONFID    0xf135
  192. #define    IPOPT_SECUR_EFTO    0x789a
  193. #define    IPOPT_SECUR_MMMM    0xbc4d
  194. #define    IPOPT_SECUR_RESTR    0xaf13
  195. #define    IPOPT_SECUR_SECRET    0xd788
  196. #define    IPOPT_SECUR_TOPSECRET    0x6bc5
  197.  
  198. /*
  199.  * Internet implementation parameters.
  200.  */
  201. #define    MAXTTL        255        /* maximum time to live (seconds) */
  202. #define    IPDEFTTL    64        /* default ttl, from RFC 1340 */
  203. #define    IPFRAGTTL    60        /* time to live for frags, slowhz */
  204. #define    IPTTLDEC    1        /* subtracted when forwarding */
  205.  
  206. #define    IP_MSS        576        /* default maximum segment size */
  207.  
  208. #endif
  209.